home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / TCL1 / __MANDEL / MANDELBR / CMANDELD.C < prev    next >
Text File  |  1992-03-28  |  3KB  |  88 lines

  1. //    CMandelDividePhase.c
  2.  
  3. #include "CMandelCheckPhase.h"
  4. #include "CMandelDividePhase.h"
  5. #include "CMandelHLinePhase.h"
  6. #include "CMandelVLinePhase.h"
  7. #include "CMandelRectPhase.h"
  8.  
  9. void
  10. CMandelDividePhase::IMandelDividePhase(CMandelDoc *theDoc,
  11.     CMandelPhase *theNextPhase, Rect theRect)
  12. {
  13.     CMandelPhase::IMandelPhase(theDoc, theNextPhase);
  14.     
  15.     itsRect = theRect;
  16. }
  17.  
  18. CMandelPhase *
  19. CMandelDividePhase::Perform(void)
  20. {
  21.     Point        aCenter;
  22.  
  23.     aCenter.v = (itsRect.bottom - itsRect.top) / 2;
  24.     aCenter.h = (itsRect.right - itsRect.left) / 2;
  25.     if (aCenter.v && aCenter.h)
  26.     {
  27.         if (aCenter.v < 4 || aCenter.h < 4)
  28.         {
  29.             CMandelRectPhase *    aRectPhase;
  30.             
  31.             aRectPhase = new CMandelRectPhase;
  32.             aRectPhase->IMandelRectPhase(itsDoc, itsNextPhase,
  33.                 itsRect.left + 1, itsRect.top + 1,
  34.                 itsRect.right - (itsRect.left + 2),
  35.                 itsRect.bottom - (itsRect.top + 2));
  36.             itsNextPhase = aRectPhase;
  37.         }
  38.         else
  39.         {
  40.             CMandelCheckPhase *    aCheckPhase;
  41.             CMandelLinePhase *    aLinePhase;
  42.             Rect                aRectMatrix[4];
  43.             
  44.             aCenter.v += itsRect.top;
  45.             aCenter.h += itsRect.left;
  46.             
  47.             aRectMatrix[0].top        = aRectMatrix[1].top    = itsRect.top;
  48.             aRectMatrix[0].left        = aRectMatrix[2].left    = itsRect.left;
  49.             aRectMatrix[2].bottom    = aRectMatrix[3].bottom    = itsRect.bottom;
  50.             aRectMatrix[1].right    = aRectMatrix[3].right    = itsRect.right;
  51.             
  52.             aRectMatrix[0].bottom    = aRectMatrix[1].bottom    =
  53.             aRectMatrix[2].top        = aRectMatrix[3].top    = aCenter.v;
  54.             aRectMatrix[0].right    = aRectMatrix[2].right    =
  55.             aRectMatrix[1].left        = aRectMatrix[3].left    = aCenter.h;
  56.             
  57.             aCheckPhase = new CMandelCheckPhase;
  58.             aCheckPhase->IMandelCheckPhase(itsDoc, itsNextPhase, aRectMatrix[3]);
  59.             itsNextPhase = aCheckPhase;
  60.             
  61.             aCheckPhase = new CMandelCheckPhase;
  62.             aCheckPhase->IMandelCheckPhase(itsDoc, itsNextPhase, aRectMatrix[2]);
  63.             itsNextPhase = aCheckPhase;
  64.             
  65.             aCheckPhase = new CMandelCheckPhase;
  66.             aCheckPhase->IMandelCheckPhase(itsDoc, itsNextPhase, aRectMatrix[1]);
  67.             itsNextPhase = aCheckPhase;
  68.             
  69.             aCheckPhase = new CMandelCheckPhase;
  70.             aCheckPhase->IMandelCheckPhase(itsDoc, itsNextPhase, aRectMatrix[0]);
  71.             itsNextPhase = aCheckPhase;
  72.             
  73.             aLinePhase = new CMandelHLinePhase;
  74.             aLinePhase->IMandelLinePhase(itsDoc, itsNextPhase,
  75.                 itsRect.left + 1, aCenter.v, itsRect.right - (itsRect.left + 2));
  76.             itsNextPhase = aLinePhase;
  77.             
  78.             aLinePhase = new CMandelVLinePhase;
  79.             aLinePhase->IMandelLinePhase(itsDoc, itsNextPhase,
  80.                 aCenter.h, itsRect.top + 1, itsRect.bottom - (itsRect.top + 2));
  81.             itsNextPhase = aLinePhase;
  82.         }
  83.     }
  84.  
  85.     return itsNextPhase;
  86. }
  87.  
  88.